/*
 *  Copyright 2019-2020 Zheng Jie
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package com.fzhucc.modules.sendDataToQz.service;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.fzhucc.exception.BadRequestException;
import com.fzhucc.modules.qzAreaManage.domain.QzAreaManage;
import com.fzhucc.modules.qzAreaManage.repository.QzAreaManageRepository;
import com.fzhucc.modules.qzDictDetails.domain.QzDictDetails;
import com.fzhucc.modules.qzDictDetails.repository.QzDictDetailsRepository;
import com.fzhucc.modules.sciPersonnelInfo.domain.SciPersonnelInfo;
import com.fzhucc.modules.sciPersonnelInfo.repository.SciPersonnelInfoRepository;
import com.fzhucc.modules.sciTechnologyDemand.domain.SciTechnologyDemand;
import com.fzhucc.modules.sciTechnologyDemand.repository.SciTechnologyDemandRepository;
import com.fzhucc.modules.sendDataToQz.util.*;
import com.fzhucc.modules.system.domain.User;
import com.fzhucc.modules.system.repository.UserRepository;
import com.fzhucc.modules.ts.domain.TsTeam;
import com.fzhucc.modules.ts.repository.TsTeamRepository;
import com.fzhucc.utils.AESUtil;
import com.fzhucc.utils.CreateSecrteKey;
import com.fzhucc.utils.RsaUtils2;
import com.fzhucc.utils.SecurityUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;


/**
 * @author yyg
 * @website https://eladmin.vip
 * @description 全总对接服务接口  传数据给全总   企业需求、劳模、服务队
 * @date 2024-04-18
 **/
@Service
@RequiredArgsConstructor
@Slf4j
public class SendToQzService {

    private final QzAreaManageRepository qzAreaManageRepository;

    private final QzDictDetailsRepository qzDictDetailsRepository;

    private final SciTechnologyDemandRepository sciTechnologyDemandRepository;

    private final SciPersonnelInfoRepository sciPersonnelInfoRepository;

    private final TsTeamRepository tsTeamRepository;

    @Value("${qz.url}")
    public String baseUrl;

    @Value("${qz.djId}")
    public String sysid;

    @Value("${qz.key.qzpublic}")
    public String PUB_KEY;

    @Value("${qz.key.private}")
    public String PRI_KEY;

    @Value("${sci.audit.shtg}")
    public String shtg;


    public String sign = "";
    //public String reqid = UUID.randomUUID().toString();

    //public static String PUB_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxwIIJ5ZF7/6uYIvoOhNnUXmZFZr79Ub1rBWuLE0yRcB9veGEhqPRtE1Z12ghicWXwzr/Fd8slHr/FvPD95pjMZtjn9JPhMmSScepwpEMo4KkH3dmHqPQPF8gLzZ2ee/263pspGtYraSYWXUsz0ZhTdHC/65C+uut2Y6lozE+IyBhmt1DUe/ePw1yL2sPFl1SnYhrsmLlT2fEsM8MsmI9VvheTDlR1pC/alnBlnHYsCjLhO1K2u6pYN2o9bROvBTyuza1jmSMNCKk+NK5KaWZLjW/JdjKapMZ0J9pu+7tvSn4h29eHpBtRzNjDgU31By9MLQjkPxYFVu2v3r3ZOyHaQIDAQAB";

    //public static String PRI_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHAggnlkXv/q5gi+g6E2dReZkVmvv1RvWsFa4sTTJFwH294YSGo9G0TVnXaCGJxZfDOv8V3yyUev8W88P3mmMxm2Of0k+EyZJJx6nCkQyjgqQfd2Yeo9A8XyAvNnZ57/bremyka1itpJhZdSzPRmFN0cL/rkL6663ZjqWjMT4jIGGa3UNR794/DXIvaw8WXVKdiGuyYuVPZ8SwzwyyYj1W+F5MOVHWkL9qWcGWcdiwKMuE7Ura7qlg3aj1tE68FPK7NrWOZIw0IqT40rkppZkuNb8l2MpqkxnQn2m77u29KfiHb14ekG1HM2MOBTfUHL0wtCOQ/FgVW7a/evdk7IdpAgMBAAECggEAe6SpiF73SOsFUHrcZ+jSUm6oTCIk1Pmnfalis6eqymeUODs7aaOykMFWRl0uKTkY13V6Mw6b1gytHIeLg/TqGFIhDZVPToMmXqysrnQMVDLA4cP/MJ46rKe1iV/fMFeFJDzF70m6qPgQp9QDaSyjHARtkQmmF9wCAZ99De10W8GT2J+rHL53FLCVoiwz0RWyeFNGJOQg4jLok9Cvq98LXZqayR7e+deT8+8wx+nQ78fAHI95LNY6HXrKd87jRR24jpIBZDi+9SSJVfiXU1A0jyi9hI6VWR4SQ26mmkXSE8bFMyO74w1ihRDTvMWn8UTjOpueasz0mvXaWxsgGR6ruQKBgQDss0S3HIR3hAaW0K7OSkf/5srNto6M4cVGygD+BTRuFPyHifMWZfQbZLShS4za5jFm3ADimHQcuXTywMHy39Er2Vkjev/NRk6JnfLQ23mbMySzjclxAPK+uQlPyPzfG2XCZiFldbq3YuAJESYTas5r0pkP2gXKUgqgsK+mW7QCAwKBgQDXO/9hxJFjqvJFUPexHYFARGd+K3JUim5hCf4Ofzck/22fCAauXUtWLXxbFT+ya9F+tjrMDBx5pLmaPOKYsd7eyMBJCvfIPBTfv+jW8NxpBGA/GkqP7I22SLVV72Wc2YP5z9E6V7j+V5XtZhJto2Gg+oZN2we1deTZ2Jb2UtNrIwKBgQCd4rpMNh56JjvK76oaelvqa0UN0N7nRFW18VqWFlyxrRgBRNg8MYeRmiwOhvmOrgt34/pHK5AP9Pj4T/FPE1JQIGugChSFFYefrhbgj/Veu8+YYVRkJ1DEPWLjsFpUa88Fy+As8Em6t55fDexK+Wx1aYWlmDVSjkT+iLyxh+vbhwKBgH+7/a4aKGbMFwgIK1eTuRdZAUqhojKGDUfN1FbqLOHqLTaKXtywRXuZdwnfLHRJBIV8xJxAO839cqEUrS4NscTpwyQWPEM7VPANRrP5MfWpQS1x/vo3W0rpD6U2dEmH1Yk2SmejlAhuFm5Te3BR3CjbRUWDTanlk7GtlroNIaedAoGBAN2/6JkO4+TFaL/26fzV7m4rBTp10B8FHwbJOSj7h2uHK0rjxIkdv7/6cTpcZtDhsvYWQLai68Nwnc7Y+nP64zBfBE6wO9qzyUZW0XtDMhpj0xy0MlFohdr+YnMfOHkQeZ+uQBefOpz8D0Kq9KrNh8tVhrJPpyZqABZnoMdFsvnU";

    //企业性质 对接
    public static String ZD_QYXZ = "craftsman_enterprise_property";

    //服务队类型
    public static String ZD_FWDLX = "service_team_type";

    //服务队区县级
    public static String ZD_FWDQXJ = "service_team_level";

    //服务队所属行业类型
    public static String ZD_FWDHYLX = "sys_industry";

    //劳模劳动模范
    public static String ZD_LDMF = "craftsman_enter_type";

    //企业需求需求类别
    public static String ZD_XQLB = "enterprise_demand_type";

    //性别
    public static String ZD_SEX = "sys_user_sex";

    //国籍
    public static String ZD_ZG = "sys_nationality";

    //需求办理状态
    public static String ZD_DOSTATUS = "enterprise_demand_status";

    public static int GHDQ = 1;

    public static int SZD = 2;

    //获取当前时间前7天的时间
    public Date getUpSeven() {
        // 创建 Calendar 对象
        Calendar calendar = Calendar.getInstance();
        // 设置为当前时间
        calendar.setTimeInMillis(System.currentTimeMillis());
        // 将日期向前移动7天
        calendar.add(Calendar.DAY_OF_MONTH, -7);
        return calendar.getTime();
    }

    public void getModelToQzAll() throws Exception {
        List<SciPersonnelInfo> list = sciPersonnelInfoRepository.findNormalByLikeAreaWithOutIsShowFJS(shtg);
        if (list != null && list.size() > 0) {
            for (SciPersonnelInfo model : list) {
                doSendModelToQz();
            }
        }
    }

    public void getModelToQzBySevenTime() throws Exception {
        List<SciPersonnelInfo> listNormal = sciPersonnelInfoRepository.findNormalWithOutIsShowWithTime(shtg, getUpSeven(), new Date());
        if (listNormal != null && listNormal.size() > 0) {
            for (SciPersonnelInfo model : listNormal) {
                doSendModelToQz();
            }
        }
    }

    public String getModelToQzBySevenTimeTest() throws Exception {
        String str = doSendModelToQz();
        return str;
    }

    public String getsendXqToQzBySevenTimeTest() throws Exception {
        String str = doSendXqToQz();
        return str;
    }

    public String getsendJsToQzBySevenTimeTest() throws Exception {
        String str = doSendJsToQz();
        return str;
    }

    public String getsendXqQyToQzBySevenTimeTest() throws Exception {
        String str = doSendXqQyToQz();
        return str;
    }

    public String getsendModelQyToQzBySevenTimeTest() throws Exception {
        String str = doSendModelQyToQz();
        return str;
    }

    public String sendPicToQz(String picName, String path) throws Exception {
        //发送数据给全总 返回id运用
        String str = doSendPicToQz(picName, path);
        return str;
    }

    //TODO 向全总获取字典
    public String getQzDict(String dict) throws Exception {
        String url = baseUrl + "/general/selectDictByDictType";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("dictType", dict);
        String res = print(url, jsonObject.toJSONString());
        log.info("向全总获取字典返回:{}", res);
        return res;
    }

    //TODO 向全总获取所属工会
    public String getQzAllArea(String name) throws Exception {
        String url = baseUrl + "/general/selectDeptByDeptName";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("deptName", name);
        jsonObject.put("pageNum", 1);
        jsonObject.put("pageSize", 99);
        String res = print(url, jsonObject.toJSONString());
        log.info("向全总获取所属工会返回:{}", res);
        return res;
    }

    //TODO 向全总获取所在地区查询
    public String getAreaByAreaName(String name) throws Exception {
        String url = baseUrl + "/general/selectAreaByAreaName";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", name);
        jsonObject.put("pageNum", 1);
        jsonObject.put("pageSize", 99);
        String res = print(url, jsonObject.toJSONString());
        log.info("向全总获取所在地区返回:{}", res);
        return res;
    }

    //TODO 发送图片给全总返回id
    public String doSendPicToQz(String picName, String path) throws Exception {
        String url = baseUrl + "/general/attachmentUpload";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", picName);
        //jsonObject.put("content", sendDataGeneralUtil.generateBase64(path));
        String basePic = "";
        try {
            basePic = WordImageConvertor.imageToBase64(path);
        } catch (Exception e) {
            log.info("识别网络图片失败名称:{},异常:", picName, e.getMessage());
            return "";
        }
        jsonObject.put("content", basePic);
        String res = print(url, jsonObject.toJSONString());
        //log.info("发送全总劳模数据返回:{},时间:{}", res, new Date());
        if (res != null && !res.equals("")) {
            JSONObject jsonObject1 = JSONObject.parseObject(res);
            Object code = jsonObject1.get("code");
            if (code.toString().equals("200")) {
                //操作成功
                Object data = jsonObject1.get("data");
                JSONObject jsonObject2 = JSONObject.parseObject(JSONObject.toJSONString(data));
                Object id = jsonObject2.get("id");
                log.info("上传全总图片成功返回图片id值:{}", id);
                return id.toString();
            } else {
                //操作失败
                log.info("上传全总图片失败,状态码不为200,返回:{}", res);
            }
        } else {
            log.info("上传全总图片失败返回:{}", res);
        }
        return res;
    }

    //TODO 发送技术服务队
    public String doSendJsToQz() throws Exception {
        String url = baseUrl + "/craftsmanservice/addCraftsmanService";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "服务队名称");  //服务队名称  必填
        jsonObject.put("headImgId", null);  //服务队头图Id（此处参照附件上传接口返回的id）  必填
        jsonObject.put("industryType", "服务队所属行业类型");  //服务队所属行业类型 字典类型sys_industry，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("type", "服务队类型");//服务队类型 字典类型service_team_type，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("level", "服务队级别");//服务队级别 字典类型service_team_level，调用字典查询接口获取数据，对应类型参数 必填
        jsonObject.put("receivedNeedNum", "0");//接收需求数量  非必填 int
        jsonObject.put("solvedNeedNum", "0");//已解决需求数量  非必填 int
        jsonObject.put("solvingNeedNum", "0");//解决中需求数量  非必填 int
        jsonObject.put("introduce", "服务队介绍");//服务队介绍  非必填
        jsonObject.put("laborUnionPathName", "服务队级别");//所属工会全路径（参考所属工会查询接口） 必填
        jsonObject.put("remark", "服务队级别");//备注  非必填
        jsonObject.put("externalSourceId", null);//外部业务id(省市平台服务队唯一标识) 必填

        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总技术服务队数据返回:{}", res);
        return res;
    }

    //TODO 发送企业需求中的企业信息
    public String doSendXqQyToQz() throws Exception {
        String url = baseUrl + "/enterprise/addEnterprise";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "企业名称");  //企业名称  必填
        jsonObject.put("code", "统一社会信用代码");//统一社会信用代码 必填
        jsonObject.put("tradeUnionPathName", "所属工会全路径");  //所属工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("nature", "企业性质");//企业性质 字典类型为craftsman_enterprise_property，调用字典查询接口获取数据 必填
        jsonObject.put("areaPathName", "所在地区全路径");//所在地区全路径（参考所在地区查询接口） 必填
        jsonObject.put("legalRepresentative", "法定代表人");  //法定代表人  非必填
        jsonObject.put("detailAddress", "企业详细地址");  //企业详细地址  非必填
        jsonObject.put("establishedTime", "企业成立时间");  //企业成立时间（格式yyyy-MM-dd）  非必填
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总需求中的企业信息数据返回:{}", res);
        return res;
    }

    //TODO 发送劳模中的企业信息
    public String doSendModelQyToQz() throws Exception {
        String url = baseUrl + "/enterprise/addEnterprise";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "企业名称");  //企业名称  必填
        jsonObject.put("code", "统一社会信用代码");//统一社会信用代码 必填
        jsonObject.put("tradeUnionPathName", "所属工会全路径");  //所属工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("nature", "企业性质");//企业性质 字典类型为craftsman_enterprise_property，调用字典查询接口获取数据 必填
        jsonObject.put("areaPathName", "所在地区全路径");//所在地区全路径（参考所在地区查询接口） 必填
        jsonObject.put("legalRepresentative", "法定代表人");  //法定代表人  非必填
        jsonObject.put("detailAddress", "企业详细地址");  //企业详细地址  非必填
        jsonObject.put("establishedTime", "企业成立时间");  //企业成立时间（格式yyyy-MM-dd）  非必填
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总劳模中的企业信息数据数据返回:{}", res);
        return res;
    }

    //查询所有正常的审核通过的技术服务队发送
    public void rTsAll() throws Exception {
        List<TsTeam> list = tsTeamRepository.findNormalByLikeAreaWithOutIsShowFJS(shtg);
        if (list != null && list.size() > 0) {
            for (TsTeam ts : list) {
                //TODO 发送过的暂时不发送
                if (ts.getSendQzTime() == null) {
                    rTs(ts);
                }
            }
        }
    }

    //查询所有正常的审核通过的企业需求中的企业信息发送
    public void rXqQyAll() throws Exception {
        List<SciTechnologyDemand> list = sciTechnologyDemandRepository.findNormalByLikeAreaWithOutIsShowFJS(shtg);
        if (list != null && list.size() > 0) {
            for (SciTechnologyDemand sciTechnologyDemand : list) {
                //TODO 发送过的暂时不发送
                if (sciTechnologyDemand.getSendQzQyTime() == null) {
                    rXqQy(sciTechnologyDemand);
                }
            }
        }
    }

    //查询所有正常的审核通过的企业需求信息发送   需求中的企业发送后在发送
    public void rXqAll() throws Exception {
        List<SciTechnologyDemand> list = sciTechnologyDemandRepository.findNormalByLikeAreaWithOutIsShowFJS(shtg);
        if (list != null && list.size() > 0) {
            for (SciTechnologyDemand sciTechnologyDemand : list) {
                //TODO 发送过的暂时不发送
                if (sciTechnologyDemand.getSendQzTime() == null) {
                    rXq(sciTechnologyDemand);
                }
            }
        }
    }

    //查询所有正常的审核通过的劳模信息发送     劳模中的企业发送后在发送
    public void rMAll() throws Exception {
        List<SciPersonnelInfo> list = sciPersonnelInfoRepository.findNormalByLikeAreaWithOutIsShowFJS(shtg);
        if (list != null && list.size() > 0) {
            for (SciPersonnelInfo model : list) {
                //TODO 发送过的暂时不发送
                if (model.getSendQzTime() == null) {
                    rM(model);
                }
            }
        }
    }

    //查询所有正常的审核通过的劳模中的企业信息发送
    public void rMQyAll() throws Exception {
        List<SciPersonnelInfo> list = sciPersonnelInfoRepository.findNormalByLikeAreaWithOutIsShowFJS(shtg);
        if (list != null && list.size() > 0) {
            for (SciPersonnelInfo sciPersonnelInfo : list) {
                //TODO 发送过的暂时不发送
                if (sciPersonnelInfo.getSendQzQyTime() == null) {
                    rMQy(sciPersonnelInfo);
                }
            }
        }
    }


    //TODO 发送企业需求中的企业信息 real真实数据
    public String rXqQy(SciTechnologyDemand demand) throws Exception {
        String businessLicense = demand.getBusinessLicense();
        if (businessLicense == null) {
            businessLicense = "";
        }
        String orgArea = demand.getOrgArea();
        String[] split = orgArea.split(";");
        String gh_str = "";
        if (split.length == 1) {
            gh_str = split[0];
        }
        if (split.length == 2) {
            gh_str = split[1];
        }
        if (split.length == 3) {
            gh_str = split[2];
        }

        List<QzAreaManage> list = qzAreaManageRepository.findLikeNameOrUseName("%" + gh_str + "%", GHDQ);
        if (list == null) {
            log.info("需求企业新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "需求企业新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() == 0) {
            log.info("需求企业新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "需求企业新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() > 1) {
            log.info("需求企业新增,在全总对接数据表查询到多个此工会:{}", gh_str);
            return "需求企业新增,在全总对接数据表查询到多个此工会" + gh_str;
        }
        //TODO 查询企业性质
        String qyXz = "";
        //List<QzDictDetails> listDetails = qzDictDetailsRepository.findType(ZD_QYXZ);

        String companyType = demand.getCompanyType();
        if (companyType == null) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_QYXZ, "其他");
            qyXz = qzDictDetails.getDictValue();
        }
        if (companyType.equals("民营")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_QYXZ, "私营");
            qyXz = qzDictDetails.getDictValue();
        } else if (companyType.equals("国有")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_QYXZ, "国有");
            qyXz = qzDictDetails.getDictValue();
        } else {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_QYXZ, "其他");
            qyXz = qzDictDetails.getDictValue();
        }


        String areaPath = "";
        String cporgArea = demand.getCompanyArea();
        if (cporgArea == null || cporgArea.equals("")) {
            //log.info("需求企业新增,归属地区为null,企业名称:{},需求id:{}",demand.getCompanyName(),demand.getId());
            //return "需求企业新增,归属地区为null";
        } else {
            String[] split2 = cporgArea.split(";");
            String dq_str = "";
            if (split2.length == 1) {
                dq_str = split2[0];
            }
            if (split2.length == 2) {
                dq_str = split2[1];
            }
            if (split2.length == 3) {
                dq_str = split2[2];
            }

            List<QzAreaManage> list2 = qzAreaManageRepository.findLikeNameOrUseName("%" + dq_str + "%", SZD);
            if (list2 == null) {
                log.info("需求企业新增,未在全总对接数据表查询到此地区所在地:{}", dq_str);
                return "需求企业新增,未在全总对接数据表查询到此地区所在地" + dq_str;
            }
            if (list2.size() == 0) {
                log.info("需求企业新增,未在全总对接数据表查询到此地区所在地:{}", dq_str);
                return "需求企业新增,未在全总对接数据表查询到此地区所在地" + dq_str;
            }
            if (list2.size() > 1) {
                log.info("需求企业新增,在全总对接数据表查询到多个此地区所在地:{}", dq_str);
                return "需求企业新增,在全总对接数据表查询到多个此地区所在地" + dq_str;
            }
            areaPath = list2.get(0).getPathName();
        }


        String url = baseUrl + "/enterprise/addEnterprise";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", demand.getCompanyName());  //企业名称  必填
        jsonObject.put("code", businessLicense);//统一社会信用代码 必填
        jsonObject.put("tradeUnionPathName", list.get(0).getPathName());  //所属工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("nature", qyXz);//企业性质 字典类型为craftsman_enterprise_property，调用字典查询接口获取数据 必填
        jsonObject.put("areaPathName", areaPath);//所在地区全路径（参考所在地区查询接口） 必填
        //demand.getContacts() 联系人设为法定代表人
        jsonObject.put("legalRepresentative", demand.getContacts());  //法定代表人  非必填
        jsonObject.put("detailAddress", demand.getAddress());  //企业详细地址  非必填
        //jsonObject.put("establishedTime", demand.getRegistrationTime());  //企业成立时间（格式yyyy-MM-dd）  非必填
        //TODO 企业成立时间格式不统一暂时不传
        jsonObject.put("establishedTime", null);
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总需求企业信息数据返回:{},发送的数据:{}", res, jsonObject.toJSONString());

        //TODO 发送成功记录 成功发送时间
        JSONObject jsonObject1 = JSONObject.parseObject(res);
        Object code = jsonObject1.get("code");
        if (code.toString().equals("200")) {
            Integer id = demand.getId();
            Optional<SciTechnologyDemand> ops = sciTechnologyDemandRepository.findById(id);
            if (ops.isPresent()) {
                SciTechnologyDemand sciTechnologyDemand = ops.get();
                sciTechnologyDemand.setSendQzQyTime(new Timestamp(new Date().getTime()));
                sciTechnologyDemandRepository.save(sciTechnologyDemand);
            }
        }
        return res;
    }

    //TODO 发送劳模中的企业信息 real真实数据
    public String rMQy(SciPersonnelInfo model) throws Exception {
        //String businessLicense = "6666";//模拟测试 随便填写信用代码
        String businessLicense = "";
        String orgArea = model.getOrgArea();
        String[] split = orgArea.split(";");
        String gh_str = "";
        if (split.length == 1) {
            gh_str = split[0];
        }
        if (split.length == 2) {
            gh_str = split[1];
        }
        if (split.length == 3) {
            gh_str = split[2];
        }

        List<QzAreaManage> list = qzAreaManageRepository.findLikeNameOrUseName("%" + gh_str + "%", GHDQ);
        if (list == null) {
            log.info("劳模企业新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "劳模企业新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() == 0) {
            log.info("劳模企业新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "劳模企业新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() > 1) {
            log.info("劳模企业新增,在全总对接数据表查询到多个此工会:{}", gh_str);
            return "劳模企业新增,在全总对接数据表查询到多个此工会" + gh_str;
        }
        //TODO 查询企业性质
        String qyXz = "";
        QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_QYXZ, "其他");
        qyXz = qzDictDetails.getDictValue();


        String areaPath = "";
        String cporgArea = model.getCompanyarea();
        if (cporgArea == null || cporgArea.equals("")) {
            //log.info("劳模企业新增,归属地区为null,企业名称:{},需求id:{}",model.getCompanyName(),model.getId());
            //return "劳模企业新增,归属地区为null";
        } else {
            String[] split2 = cporgArea.split(";");
            String dq_str = "";
            if (split2.length == 1) {
                dq_str = split2[0];
            }
            if (split2.length == 2) {
                dq_str = split2[1];
            }
            if (split2.length == 3) {
                dq_str = split2[2];
            }

            List<QzAreaManage> list2 = qzAreaManageRepository.findLikeNameOrUseName("%" + dq_str + "%", SZD);
            if (list2 == null) {
                log.info("劳模企业新增,未在全总对接数据表查询到此地区所在地:{}", dq_str);
                return "劳模企业新增,未在全总对接数据表查询到此地区所在地" + dq_str;
            }
            if (list2.size() == 0) {
                log.info("劳模企业新增,未在全总对接数据表查询到此地区所在地:{}", dq_str);
                return "劳模企业新增,未在全总对接数据表查询到此地区所在地" + dq_str;
            }
            if (list2.size() > 1) {
                log.info("劳模企业新增,在全总对接数据表查询到多个此地区所在地:{}", dq_str);
                return "劳模企业新增,在全总对接数据表查询到多个此地区所在地" + dq_str;
            }
            areaPath = list2.get(0).getPathName();
        }


        String url = baseUrl + "/enterprise/addEnterprise";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", model.getEmployer());  //企业名称  必填
        jsonObject.put("code", businessLicense);//统一社会信用代码 必填  劳模表没有
        jsonObject.put("tradeUnionPathName", list.get(0).getPathName());  //所属工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("nature", qyXz);//企业性质 字典类型为craftsman_enterprise_property，调用字典查询接口获取数据 必填
        jsonObject.put("areaPathName", areaPath);//所在地区全路径（参考所在地区查询接口） 必填
        //demand.getContacts() 联系人设为法定代表人
        jsonObject.put("legalRepresentative", null);  //法定代表人  非必填
        jsonObject.put("detailAddress", null);  //企业详细地址  非必填
        //jsonObject.put("establishedTime", demand.getRegistrationTime());  //企业成立时间（格式yyyy-MM-dd）  非必填
        //TODO 企业成立时间格式不统一暂时不传
        jsonObject.put("establishedTime", null);
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总劳模企业信息数据返回:{},发送的数据:{}", res, jsonObject.toJSONString());

        //TODO 发送成功记录 成功发送时间
        JSONObject jsonObject1 = JSONObject.parseObject(res);
        Object code = jsonObject1.get("code");
        if (code.toString().equals("200")) {
            Integer id = model.getId();
            Optional<SciPersonnelInfo> ops = sciPersonnelInfoRepository.findById(id);
            if (ops.isPresent()) {
                SciPersonnelInfo sciPersonnelInfo = ops.get();
                sciPersonnelInfo.setSendQzQyTime(new Timestamp(new Date().getTime()));
                sciPersonnelInfoRepository.save(sciPersonnelInfo);
            }
        }
        return res;
    }

    //TODO 发送技术服务队  real真实数据
    public String rTs(TsTeam tsTeam) throws Exception {
        String pic = tsTeam.getPic();
        //发送数据给全总 返回id运用
        //SendDataGeneralUtil util = new SendDataGeneralUtil();
        //String str = util.attachmentUpload(baseUrl, sysid, "", "");
        String picReturnId = "";
        if (pic == null) {
            //log.info("发送技术服务队封面为null无法发送,时间:{}", new Date());
            //return "发送技术服务队封面为null无法发送";
        } else {
            if (pic.contains("/")) {
                //获取图片名称
                int lastSlashIndex = pic.lastIndexOf("/");
                String picName = pic.substring(lastSlashIndex + 1);
                picReturnId = doSendPicToQz(picName, pic);
            }
        }


        String orgArea = tsTeam.getOrgArea();
        String[] split = orgArea.split(";");
        String gh_str = "";
        if (split.length == 1) {
            gh_str = split[0];
        }
        if (split.length == 2) {
            gh_str = split[1];
        }
        if (split.length == 3) {
            gh_str = split[2];
        }

        List<QzAreaManage> list = qzAreaManageRepository.findLikeNameOrUseName("%" + gh_str + "%", GHDQ);
        if (list == null) {
            log.info("技术服务队新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "技术服务队新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() == 0) {
            log.info("技术服务队新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "技术服务队新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() > 1) {
            log.info("技术服务队新增,在全总对接数据表查询到多个此工会:{}", gh_str);
            return "技术服务队新增,在全总对接数据表查询到多个此工会" + gh_str;
        }

        //TODO 查询所属行业类型
        String fwdhylx = "";
        String industrySector = tsTeam.getIndustrySector();
        if (industrySector == null || industrySector.equals("")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_FWDHYLX, "其他");
            fwdhylx = qzDictDetails3.getDictValue();
        }
        if (industrySector.contains("电子")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%信息%");
            fwdhylx = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("建筑")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%建筑%");
            fwdhylx = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("新材料")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%科学研究%");
            fwdhylx = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("环保")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%环境%");
            fwdhylx = qzDictDetails3.getDictValue();
        } else {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_FWDHYLX, "其他");
            fwdhylx = qzDictDetails3.getDictValue();
        }


        //TODO 查询服务队类型 默认查服务队
        String fwdType = "";
        QzDictDetails qzDictDetails2 = qzDictDetailsRepository.findTypeLabel(ZD_FWDLX, "服务队");
        fwdType = qzDictDetails2.getDictValue();

        //TODO 查询服务队级别  查询助企行系统 区县级默认为区级
        String fwdlevel = "";
        String sqType = tsTeam.getSqType();
        if (sqType == null || sqType.equals("")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_FWDQXJ, "区级");
            fwdlevel = qzDictDetails.getDictValue();
        }
        if (sqType.equals("市级")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_FWDQXJ, "市级");
            fwdlevel = qzDictDetails.getDictValue();
        } else {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_FWDQXJ, "区级");
            fwdlevel = qzDictDetails.getDictValue();
        }

        String url = baseUrl + "/craftsmanservice/addCraftsmanService";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", tsTeam.getInfoName());  //服务队名称  必填
        jsonObject.put("headImgId", picReturnId);  //服务队头图Id（此处参照附件上传接口返回的id）  必填
        jsonObject.put("industryType", fwdhylx);  //服务队所属行业类型 字典类型sys_industry，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("type", fwdType);//服务队类型 字典类型service_team_type，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("level", fwdlevel);//服务队级别 字典类型service_team_level，调用字典查询接口获取数据，对应类型参数 必填
        //TODO 暂时不传
        jsonObject.put("receivedNeedNum", null);//接收需求数量  非必填 int
        jsonObject.put("solvedNeedNum", null);//已解决需求数量  非必填 int
        jsonObject.put("solvingNeedNum", null);//解决中需求数量  非必填 int
        jsonObject.put("introduce", tsTeam.getDetails());//服务队介绍  非必填
        jsonObject.put("laborUnionPathName", list.get(0).getPathName());//所属工会全路径（参考所属工会查询接口） 必填
        jsonObject.put("remark", tsTeam.getResult());//备注  非必填
        jsonObject.put("externalSourceId", tsTeam.getId());//外部业务id(省市平台服务队唯一标识) 必填   助企行系统id

        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总技术服务队数据返回:{},发送的数据:{}", res, jsonObject.toJSONString());
        //TODO 发送成功记录 成功发送时间
        JSONObject jsonObject1 = JSONObject.parseObject(res);
        Object code = jsonObject1.get("code");
        if (code.toString().equals("200")) {
            Integer id = tsTeam.getId();
            Optional<TsTeam> ops = tsTeamRepository.findById(id);
            if (ops.isPresent()) {
                TsTeam tsTeam1 = ops.get();
                tsTeam1.setSendQzTime(new Timestamp(new Date().getTime()));
                tsTeamRepository.save(tsTeam1);
            }
        }
        return res;
    }

    //TODO 发送企业需求 real真实数据
    public String rXq(SciTechnologyDemand demand) throws Exception {
        String cons = "";//需求联系人
        String cjt = "";//需求联系人职务
        String consWay = "";//需求联系方式
        String honor = "";//需求描述

        if (demand.getContacts() != null) {
            cons = demand.getContacts();
        }
        if (demand.getJobTitle() != null) {
            cjt = demand.getJobTitle();
        }
        if (demand.getContactWay() != null) {
            consWay = demand.getContactWay();
        }
        if (demand.getHonor() != null) {
            honor = demand.getHonor();
        }

        String orgArea = demand.getOrgArea();
        String[] split = orgArea.split(";");
        String gh_str = "";
        if (split.length == 1) {
            gh_str = split[0];
        }
        if (split.length == 2) {
            gh_str = split[1];
        }
        if (split.length == 3) {
            gh_str = split[2];
        }

        List<QzAreaManage> list = qzAreaManageRepository.findLikeNameOrUseName("%" + gh_str + "%", GHDQ);
        if (list == null) {
            log.info("企业需求新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "企业需求新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() == 0) {
            log.info("企业需求新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "企业需求新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() > 1) {
            log.info("企业需求新增,在全总对接数据表查询到多个此工会:{}", gh_str);
            return "企业需求新增,在全总对接数据表查询到多个此工会" + gh_str;
        }

        String areaPath = "";
        String cporgArea = demand.getCompanyArea();
        if (cporgArea == null || cporgArea.equals("")) {
            //log.info("企业需求新增新增,归属地区为null,企业名称:{},需求id:{}",demand.getCompanyName(),demand.getId());
            //return "企业需求新增新增,归属地区为null";
        } else {
            String[] split2 = cporgArea.split(";");
            String dq_str = "";
            if (split2.length == 1) {
                dq_str = split2[0];
            }
            if (split2.length == 2) {
                dq_str = split2[1];
            }
            if (split2.length == 3) {
                dq_str = split2[2];
            }

            List<QzAreaManage> list2 = qzAreaManageRepository.findLikeNameOrUseName("%" + dq_str + "%", SZD);
            if (list2 == null) {
                log.info("企业需求新增,未在全总对接数据表查询到此地区所在地:{}", dq_str);
                return "企业需求新增,未在全总对接数据表查询到此地区所在地" + dq_str;
            }
            if (list2.size() == 0) {
                log.info("企业需求新增,未在全总对接数据表查询到此地区所在地:{}", dq_str);
                return "企业需求新增,未在全总对接数据表查询到此地区所在地" + dq_str;
            }
            if (list2.size() > 1) {
                log.info("企业需求新增,在全总对接数据表查询到多个此地区所在地:{}", dq_str);
                return "企业需求新增,在全总对接数据表查询到多个此地区所在地" + dq_str;
            }
            areaPath = list2.get(0).getPathName();
        }



        //需求类别
        String xqlb = "";
        String retype = demand.getRetype();
        if (retype == null) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_XQLB, "其他");
            xqlb = qzDictDetails.getDictValue();
        }
        if (retype.contains("技术攻关")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_XQLB, "技术攻关");
            xqlb = qzDictDetails.getDictValue();
        } else if (retype.contains("产品开发")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_XQLB, "企业研发");
            xqlb = qzDictDetails.getDictValue();
        } else if (retype.contains("工艺改进")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_XQLB, "工艺改进");
            xqlb = qzDictDetails.getDictValue();
        } else if (retype.contains("成果转化") || retype.contains("班组建设") || retype.contains("人才培养") || retype.contains("公益讲座")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_XQLB, "其他");
            xqlb = qzDictDetails.getDictValue();
        } else if (retype.contains("企业管理")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_XQLB, "企业研发");
            xqlb = qzDictDetails.getDictValue();
        } else if (retype.contains("技能培训")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_XQLB, "技能培训");
            xqlb = qzDictDetails.getDictValue();
        } else {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_XQLB, "其他");
            xqlb = qzDictDetails.getDictValue();
        }


        //TODO 查询所属行业类型
        String sshy = "";
        String industrySector = demand.getTechnology();
        if (industrySector == null || industrySector.equals("")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_FWDHYLX, "其他");
            sshy = qzDictDetails3.getDictValue();
        }
        if (industrySector.contains("电子")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%信息%");
            sshy = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("建筑")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%建筑%");
            sshy = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("新材料")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%科学研究%");
            sshy = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("环保")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%环境%");
            sshy = qzDictDetails3.getDictValue();
        } else {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_FWDHYLX, "其他");
            sshy = qzDictDetails3.getDictValue();
        }

        //发布时间 采用创建时间截取
        Timestamp createTime = demand.getCreateTime();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String fbTime = formatter.format(createTime);

        //TODO 需求工种
        String xqGz = "";

        //TODO 匹配状态
        String doStatus = "";
        String doStatus1 = demand.getDoStatus();
        if (doStatus1 == null) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_DOSTATUS, "待分配工匠");
            doStatus = qzDictDetails3.getDictValue();
        }
        if (doStatus1.contains("已解决")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_DOSTATUS, "服务结束");
            doStatus = qzDictDetails3.getDictValue();
        } else if (doStatus1.contains("已匹配")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_DOSTATUS, "实施");
            doStatus = qzDictDetails3.getDictValue();
        } else {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_DOSTATUS, "待分配工匠");
            doStatus = qzDictDetails3.getDictValue();
        }

        String url = baseUrl + "/enterprise/demand/addDemand";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", demand.getSlogan());  //需求名称  必填
        jsonObject.put("enterpriseName", demand.getCompanyName());//企业名称 必填
        jsonObject.put("contactPersonName", cons);//需求联系人 必填
        jsonObject.put("contactPersonDuty", cjt);//需求联系人职务 必填
        jsonObject.put("contactPersonPhone", consWay);//需求联系人电话 必填
        jsonObject.put("areaPathName", areaPath);//所在地区全路径（参考所属工会查询接口） 必填
        jsonObject.put("address", demand.getAddress());//通讯地址 非必填
        jsonObject.put("type", xqlb);//需求类别  字典类型enterprise_demand_type，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("desireService", "");//期望服务 字典，调用字典查询接口获取，对应类型参数 必填
        jsonObject.put("otherDesireService", "");//需求类别为其他时 必填  其他期望服务
        jsonObject.put("desireStartDate", "");//Date类型 期望解决开始时间（格式yyyy-MM-dd） 必填
        jsonObject.put("desireEndDate", "");//Date类型 期望解决结束时间（格式yyyy-MM-dd） 必填
        jsonObject.put("industry", sshy);//所属行业（字典类型sys_industry，调用接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("typeOfWork", xqGz);//需求工种（字典类型industry_type_of_work，调用字典查询接口获取数据，对应类型参数，参照附件1）  必填  取消字典
        jsonObject.put("description", honor);//需求描述  必填
        jsonObject.put("matchType", "");//匹配类型（字典类型match_type，调用字典查询接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("desireCraftsman", "");//期望工匠名称 期望服务对象为工匠时必填
        jsonObject.put("desireCraftsmanCode", "");//期望工匠身份证号 期望服务对象为工匠时必填
        jsonObject.put("desireCraftsmanServiceId", null);//期望服务队外部业务id 期望服务对象为服务队时必填
        jsonObject.put("publishTime", fbTime);//Date类型 发布时间  必填
        jsonObject.put("deptPathName", list.get(0).getPathName());//所在工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("enterpriseDemandStatus", doStatus);//当前需求状态（字典，调用enterprise_demand_status接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("externalSourceId", demand.getId());//外部业务id  必填  助企行需求表id
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总需求数据返回:{},发送的数据:{}", res, jsonObject.toJSONString());

        //TODO 发送成功记录 成功发送时间
        JSONObject jsonObject1 = JSONObject.parseObject(res);
        Object code = jsonObject1.get("code");
        if (code.toString().equals("200")) {
            Integer id = demand.getId();
            Optional<SciTechnologyDemand> ops = sciTechnologyDemandRepository.findById(id);
            if (ops.isPresent()) {
                SciTechnologyDemand sciTechnologyDemand = ops.get();
                sciTechnologyDemand.setSendQzTime(new Timestamp(new Date().getTime()));
                sciTechnologyDemandRepository.save(sciTechnologyDemand);
            }
        }
        return res;
    }

    //TODO 发送企业劳模 real真实数据
    public String rM(SciPersonnelInfo model) throws Exception {
        Boolean picFlag = false;
        String picReturnId = "";
        String pic = model.getPic();
        if (pic != null && pic.contains("/")) {
            int lastSlashIndex = pic.lastIndexOf("/");
            String picName = pic.substring(lastSlashIndex + 1);
            picReturnId = doSendPicToQz(picName, pic);
            picFlag = true;
        }
        //TODO 查询劳模性别
        String sex = model.getSex();
        String sexStr = "";
        if (sex == null) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_SEX, "未知");
            sexStr = qzDictDetails.getDictValue();
        }
        if (sex.equals("男")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_SEX, "男");
            sexStr = qzDictDetails.getDictValue();
        } else if (sex.equals("女")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_SEX, "女");
            sexStr = qzDictDetails.getDictValue();
        } else {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_SEX, "未知");
            sexStr = qzDictDetails.getDictValue();
        }


        //TODO 查询劳模所在地
        String areaPath = "";
        String cporgArea = model.getCompanyarea();
        if (cporgArea == null || cporgArea.equals("")) {
            //log.info("劳模新增,归属地区为null,企业名称:{},需求id:{}",model.getCompanyName(),model.getId());
            //return "劳模新增,归属地区为null";
        } else {
            String[] split2 = cporgArea.split(";");
            String dq_str = "";
            if (split2.length == 1) {
                dq_str = split2[0];
            }
            if (split2.length == 2) {
                dq_str = split2[1];
            }
            if (split2.length == 3) {
                dq_str = split2[2];
            }

            List<QzAreaManage> list2 = qzAreaManageRepository.findLikeNameOrUseName("%" + dq_str + "%", SZD);
            if (list2 == null) {
                log.info("劳模新增,未在全总对接数据表查询到此地区所在地:{}", dq_str);
                return "劳模新增,未在全总对接数据表查询到此地区所在地" + dq_str;
            }
            if (list2.size() == 0) {
                log.info("劳模新增,未在全总对接数据表查询到此地区所在地:{}", dq_str);
                return "劳模新增,未在全总对接数据表查询到此地区所在地" + dq_str;
            }
            if (list2.size() > 1) {
                log.info("劳模新增,在全总对接数据表查询到多个此地区所在地:{}", dq_str);
                return "劳模新增,在全总对接数据表查询到多个此地区所在地" + dq_str;
            }
            areaPath = list2.get(0).getPathName();
        }



        //查询身份证号
        String idcard = model.getIdcard();
        String idCardStr = "";
        if (idcard != null) {
            idCardStr = model.getIdcard();
        }
        //查询国籍给默认
        String gj = "";
        QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_ZG, "中国");
        gj = qzDictDetails.getDictValue();

        //查询工作单位
        String unit = "";
        String employer = model.getEmployer();
        if (employer != null) {
            unit = model.getEmployer();
        }

        //查询所属工会
        String orgArea = model.getOrgArea();
        String[] split = orgArea.split(";");
        String gh_str = "";
        if (split.length == 1) {
            gh_str = split[0];
        }
        if (split.length == 2) {
            gh_str = split[1];
        }
        if (split.length == 3) {
            gh_str = split[2];
        }

        List<QzAreaManage> list = qzAreaManageRepository.findLikeNameOrUseName("%" + gh_str + "%", GHDQ);
        if (list == null) {
            log.info("劳模新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "劳模新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() == 0) {
            log.info("劳模新增,未在全总对接数据表查询到此工会:{}", gh_str);
            return "劳模新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() > 1) {
            log.info("劳模新增,在全总对接数据表查询到多个此工会:{}", gh_str);
            return "劳模新增,在全总对接数据表查询到多个此工会" + gh_str;
        }


        //TODO 查询所属行业类型
        String sshy = "";
        String industrySector = model.getTechnology();
        if (industrySector == null || industrySector.equals("")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_FWDHYLX, "其他");
            sshy = qzDictDetails3.getDictValue();
        }
        if (industrySector.contains("电子")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%信息%");
            sshy = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("建筑")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%建筑%");
            sshy = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("新材料")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%科学研究%");
            sshy = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("环保")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%环境%");
            sshy = qzDictDetails3.getDictValue();
        } else {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_FWDHYLX, "其他");
            sshy = qzDictDetails3.getDictValue();
        }

        //TODO 查询劳模
        String mf = "";
        String matype = model.getMatype();
        if (matype == null) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_LDMF, "其他");
            mf = qzDictDetails3.getDictValue();
        }
        if (matype.contains("工匠")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_LDMF, "%工匠%");
            mf = qzDictDetails3.getDictValue();
        } else if (matype.contains("专家")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_LDMF, "%专家%");
            mf = qzDictDetails3.getDictValue();
        } else if (matype.contains("讲师")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_LDMF, "%讲师%");
            mf = qzDictDetails3.getDictValue();
        } else if (matype.contains("劳模") || matype.contains("劳动模范")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_LDMF, "%劳动模范%");
            mf = qzDictDetails3.getDictValue();
        } else {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_LDMF, "其他");
            mf = qzDictDetails3.getDictValue();
        }

        String url = baseUrl + "/craftsman/addCraftsman";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", model.getZqxname());  //劳模工匠姓名  必填
        if (picFlag) {
            jsonObject.put("horizontalImg", picReturnId); //劳模工匠照片横图,传附件id（此处参照附附件上传接口返回的id，建议尺寸750*417）  不必填
            jsonObject.put("verticalImg", picReturnId);//劳模工匠照片横图,传附件id（此处参照附附件上传接口返回的id，建议尺寸750*417）     不必填
            jsonObject.put("squareImg", picReturnId);// 劳模工匠照片方图,传附件id（此处参照附附件上传接口返回的id，建议尺寸500*500）     不必填
        }
        jsonObject.put("introduce", model.getDetails());//简介  不必填
        jsonObject.put("masterMessage", null);//大师寄语  不必填
        jsonObject.put("deed", null);//工匠事迹  不必填
        jsonObject.put("sex", sexStr); //性别  字典类型sys_user_sex，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("nation", "汉族");//民族   必填
        jsonObject.put("enterType", mf);//入驻类型   字典类型craftsman_enter_type，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("enterTypeRemark", null);//入驻类型为其它的时候备注说明  非必填
        jsonObject.put("politicCountenance", null);//政治面貌   字典类型politic_countenance，调用字典查询接口获取数据，对应类型参数  非必填
        if (model.getPhone().equals("")) {
            jsonObject.put("phone", RSAUtils.encryptByPublicKey("", PUB_KEY));//通过全总平台提供公钥加密      联系电话 必填
        } else {
            jsonObject.put("phone", RSAUtils.encryptByPublicKey(model.getPhone(), PUB_KEY));//通过全总平台提供公钥加密      联系电话 必填
        }
        jsonObject.put("detailAddr", areaPath); //所在地区全路径（参考所在地区查询接口）  非必填
        jsonObject.put("address", model.getAddress());//详细地址  非必填
        jsonObject.put("nationality", gj);//国籍（字典类型sys_nationality，调用字典查询接口获取数据，对应类型参数  非必填
        if (idCardStr.equals("")) {
            //没有就默认传350100000000000000
            //模拟先填个真实 身份证号
            //jsonObject.put("idNo", RSAUtils.encryptByPublicKey("350426197309164511", PUB_KEY));//通过全总平台提供公钥加密  身份证号 必填
            jsonObject.put("idNo", RSAUtils.encryptByPublicKey("350100000000000000", PUB_KEY));//通过全总平台提供公钥加密  身份证号 必填
        } else {
            jsonObject.put("idNo", RSAUtils.encryptByPublicKey(idCardStr, PUB_KEY));//通过全总平台提供公钥加密  身份证号 必填
        }
        jsonObject.put("workUnit", unit);//工作单位(企业名称) 必填
        jsonObject.put("startWork", null);//参加工作时间（格式yyyy-MM-dd）  非必填
        jsonObject.put("laborUnionPath", list.get(0).getPathName());//所属工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("post", model.getJobTitle());//职务  非必填
        jsonObject.put("postTitle", model.getPreviousYearSkill());//职称  非必填
        jsonObject.put("skillLevel", model.getPreviousYearAchievements());//技能等级  非必填
        jsonObject.put("fieldOfExpertise", model.getKeyword()); //擅长领域（字典类型field_of_expertise，调用字典查询接口获取数据，对应类型参数，参照附件1，多选用逗号拼接字典code） 非必填  改为不用字典
        jsonObject.put("remark", model.getMatype());//备注  非必填
        jsonObject.put("licenseType", "0");//证件类型(0身份证)  必填
        jsonObject.put("industry", sshy);//所属行业字典类型sys_industry，调用接口获取数据，对应类型参数 必填
        jsonObject.put("typeOfWork", "");//工种（字典类型industry_type_of_work，调用字典查询接口获取数据，对应类型参数  必填   改为不用字典
        jsonObject.put("status", "0");//状态（0：工匠信息已启用1：工匠信息已停用） 必填
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总劳模数据返回:{},发送的数据:{}", res, jsonObject.toJSONString());

        //TODO 发送成功记录 成功发送时间
        JSONObject jsonObject1 = JSONObject.parseObject(res);
        Object code = jsonObject1.get("code");
        if (code.toString().equals("200")) {
            Integer id = model.getId();
            Optional<SciPersonnelInfo> ops = sciPersonnelInfoRepository.findById(id);
            if (ops.isPresent()) {
                SciPersonnelInfo sciPersonnelInfo = ops.get();
                sciPersonnelInfo.setSendQzTime(new Timestamp(new Date().getTime()));
                sciPersonnelInfoRepository.save(sciPersonnelInfo);
            }
        }
        return res;
    }

    //TODO 发送企业需求
    public String doSendXqToQz() throws Exception {
        String url = baseUrl + "/enterprise/demand/addDemand";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "需求名称");  //需求名称  必填
        jsonObject.put("enterpriseName", "企业名称");//企业名称 必填
        jsonObject.put("contactPersonName", "需求联系人");//需求联系人 必填
        jsonObject.put("contactPersonDuty", "需求联系人职务");//需求联系人职务 必填
        jsonObject.put("contactPersonPhone", "需求联系人电话");//需求联系人电话 必填
        jsonObject.put("areaPathName", "所在地区全路径");//所在地区全路径（参考所属工会查询接口） 必填
        jsonObject.put("address", "通讯地址");//通讯地址 非必填
        jsonObject.put("type", "需求类别");//需求类别  字典类型enterprise_demand_type，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("desireService", "期望服务");//期望服务 字典，调用字典查询接口获取，对应类型参数 必填
        jsonObject.put("otherDesireService", "需求类别为其他");//需求类别为其他时 必填  其他期望服务
        jsonObject.put("desireStartDate", "2023-10-10");//Date类型 期望解决开始时间（格式yyyy-MM-dd） 必填
        jsonObject.put("desireEndDate", "2023-10-11");//Date类型 期望解决结束时间（格式yyyy-MM-dd） 必填
        jsonObject.put("industry", "所属行业");//所属行业（字典类型sys_industry，调用接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("typeOfWork", "需求工种");//需求工种（字典类型industry_type_of_work，调用字典查询接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("description", "需求描述");//需求描述  必填
        jsonObject.put("matchType", "匹配类型");//匹配类型（字典类型match_type，调用字典查询接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("desireCraftsman", "期望工匠名称");//期望工匠名称 期望服务对象为工匠时必填
        jsonObject.put("desireCraftsmanCode", "期望工匠身份证号");//期望工匠身份证号 期望服务对象为工匠时必填
        jsonObject.put("desireCraftsmanServiceId", null);//期望服务队外部业务id 期望服务对象为服务队时必填
        jsonObject.put("publishTime", "2024-01-04");//Date类型 发布时间  必填
        jsonObject.put("deptPathName", "所在工会全路径");//所在工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("enterpriseDemandStatus", "当前需求状态");//当前需求状态（字典，调用enterprise_demand_status接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("externalSourceId", "外部业务id");//外部业务id  必填
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总需求数据返回:{},时间:{}", res, new Date());
        return res;
    }

    //TODO 发送企业劳模
    public String doSendModelToQz() throws Exception {
        String url = baseUrl + "/craftsman/addCraftsman";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "张三");  //劳模工匠姓名  必填
        //jsonObject.put("img", "7");
        jsonObject.put("horizontalImg", null); //劳模工匠照片横图,传附件id（此处参照附附件上传接口返回的id，建议尺寸750*417）  不必填
        jsonObject.put("verticalImg", null);//劳模工匠照片横图,传附件id（此处参照附附件上传接口返回的id，建议尺寸750*417）     不必填
        jsonObject.put("squareImg", null);// 劳模工匠照片方图,传附件id（此处参照附附件上传接口返回的id，建议尺寸500*500）     不必填
        jsonObject.put("introduce", "张三，工匠简介。");//简介  不必填
        jsonObject.put("masterMessage", "张三的大师寄语。");//大师寄语  不必填
        jsonObject.put("deed", "张三的工匠事迹。");//工匠事迹  不必填
        jsonObject.put("sex", "男"); //性别  字典类型sys_user_sex，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("nation", "汉族");//民族   必填
        jsonObject.put("enterType", "劳动模范");//入驻类型   字典类型craftsman_enter_type，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("enterTypeRemark", null);//入驻类型为其它的时候备注说明  非必填
        jsonObject.put("politicCountenance", "群众");//政治面貌   字典类型politic_countenance，调用字典查询接口获取数据，对应类型参数  非必填
        jsonObject.put("phone", RSAUtils.encryptByPublicKey("13812345678", PUB_KEY));//通过全总平台提供公钥加密      联系电话 必填
        jsonObject.put("detailAddr", "河北省/石家庄市/新华区"); //所在地区全路径（参考所在地区查询接口）  非必填
        jsonObject.put("address", "xx街道xx号");//详细地址  非必填
        jsonObject.put("nationality", "中国");//国籍（字典类型sys_nationality，调用字典查询接口获取数据，对应类型参数  非必填
        jsonObject.put("idNo", RSAUtils.encryptByPublicKey("130102198001010001", PUB_KEY));//通过全总平台提供公钥加密  身份证号 必填
        jsonObject.put("workUnit", "劳动公司");//工作单位(企业名称) 必填
        jsonObject.put("startWork", "2000-01-01");//参加工作时间（格式yyyy-MM-dd）  非必填
        jsonObject.put("laborUnionPath", "全国总工会/河北省总工会/石家庄市总工会");//所属工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("post", "工程师");//职务  非必填
        jsonObject.put("postTitle", "高级工程师");//职称  非必填
        //jsonObject.put("jobTitle", "技术员");
        jsonObject.put("skillLevel", "高级技师");//技能等级 必填
        jsonObject.put("fieldOfExpertise", "学术领域,技能领域"); //擅长领域（字典类型field_of_expertise，调用字典查询接口获取数据，对应类型参数，参照附件1，多选用逗号拼接字典code） 必填
        //jsonObject.put("craftsmanType", "劳模工匠");
        jsonObject.put("remark", "备注信息");//备注  非必填
        jsonObject.put("licenseType", "0");//证件类型(0身份证)  必填
        jsonObject.put("industry", "制造");//所属行业字典类型sys_industry，调用接口获取数据，对应类型参数 必填
        jsonObject.put("typeOfWork", "铸造工,焊工");//工种（字典类型industry_type_of_work，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("status", "0");//状态（0：工匠信息已启用1：工匠信息已停用） 必填
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总劳模数据返回:{},时间:{}", res, new Date());
        return res;
    }

    public String print(String url, String json) throws Exception {
        String reqid = UUID.randomUUID() + DateUtils.dateTimeNow();//每次请求id 不同保证不重复提交
        String reqtime = DateUtils.dateTimeNow();
        String signLine = json + "|" + sysid + "|" + reqid + "|" + reqtime;
        //System.out.println("signLine=" + signLine);
        sign = SHA256withRSAUtil.sign2Base64(PRI_KEY, signLine);
        //System.out.println("签名" + sign);

        Map<String, String> headerMap = new LinkedHashMap<>();
        headerMap.put("zqxsign", sign);
        headerMap.put("zqxsysid", sysid);//appid
        headerMap.put("zqxreqid", reqid);//随机id 每次请求随机生成防止报重复请求
        headerMap.put("zqxreqtime", reqtime);

        String result = doPost(url, headerMap, json);
        return result;
    }


    /**
     * 以post方式调用第三方接口
     *
     * @param url     请求地址
     * @param headers 请求头
     * @param json    请求体
     * @return 请求结果
     */
    public static String doPost(String url, Map<String, String> headers, String json) {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse httpResponse = null;
        String result = "";
        try {
            //1.创建httpClient对象
            httpClient = HttpClients.createDefault();
            //2.创建httpPost对象
            HttpPost httpPost = new HttpPost(url);
            //2.1对象设置请求头
            httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
            //设置自定义请求头
            if (!headers.isEmpty()) {
                headers.forEach(httpPost::setHeader);
            }
            //2.2对象设置请求和传输超时时间
            RequestConfig.Builder custom = RequestConfig.custom();
            //超时时间10秒
            custom.setSocketTimeout(10000);
            custom.setConnectTimeout(10000);
            custom.setConnectionRequestTimeout(10000);
            httpPost.setConfig(custom.build());
            //2.3对象设置请求参数
            httpPost.setEntity(new StringEntity(json, StandardCharsets.UTF_8));
            //3.使用httpClient发起请求并响应获取repsonse
            httpResponse = httpClient.execute(httpPost);
            HttpEntity entity = httpResponse.getEntity();
            //4.解析响应，获取数据
            //判断状态码是否是200
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (HttpStatus.SC_OK == statusCode || HttpStatus.SC_BAD_REQUEST == statusCode) {
                result = EntityUtils.toString(entity, StandardCharsets.UTF_8);
                //System.out.println(result);
            }
            //System.out.println(httpResponse.getStatusLine());
            //System.out.println(httpResponse.getProtocolVersion());
            //System.out.println(Arrays.toString(httpResponse.getAllHeaders()));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //5.释放资源
            if (httpResponse != null) {
                try {
                    httpResponse.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (httpClient != null) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

    //TODO 新增企业   根据企业需求表里的企业信息进行新增
    public String doSendXqQy() throws Exception {
        String url = baseUrl + "/enterprise/demand/addDemand";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "需求名称");  //需求名称  必填
        jsonObject.put("enterpriseName", "企业名称");//企业名称 必填
        jsonObject.put("contactPersonName", "需求联系人");//需求联系人 必填
        jsonObject.put("contactPersonDuty", "需求联系人职务");//需求联系人职务 必填
        jsonObject.put("contactPersonPhone", "需求联系人电话");//需求联系人电话 必填
        jsonObject.put("areaPathName", "所在地区全路径");//所在地区全路径（参考所属工会查询接口） 必填
        jsonObject.put("address", "通讯地址");//通讯地址 非必填
        jsonObject.put("type", "需求类别");//需求类别  字典类型enterprise_demand_type，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("desireService", "期望服务");//期望服务 字典，调用字典查询接口获取，对应类型参数 必填
        jsonObject.put("otherDesireService", "需求类别为其他");//需求类别为其他时 必填  其他期望服务
        jsonObject.put("desireStartDate", "2023-10-10");//Date类型 期望解决开始时间（格式yyyy-MM-dd） 必填
        jsonObject.put("desireEndDate", "2023-10-11");//Date类型 期望解决结束时间（格式yyyy-MM-dd） 必填
        jsonObject.put("industry", "所属行业");//所属行业（字典类型sys_industry，调用接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("typeOfWork", "需求工种");//需求工种（字典类型industry_type_of_work，调用字典查询接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("description", "需求描述");//需求描述  必填
        jsonObject.put("matchType", "匹配类型");//匹配类型（字典类型match_type，调用字典查询接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("desireCraftsman", "期望工匠名称");//期望工匠名称 期望服务对象为工匠时必填
        jsonObject.put("desireCraftsmanCode", "期望工匠身份证号");//期望工匠身份证号 期望服务对象为工匠时必填
        jsonObject.put("desireCraftsmanServiceId", null);//期望服务队外部业务id 期望服务对象为服务队时必填
        jsonObject.put("publishTime", "2024-01-04");//Date类型 发布时间  必填
        jsonObject.put("deptPathName", "所在工会全路径");//所在工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("enterpriseDemandStatus", "当前需求状态");//当前需求状态（字典，调用enterprise_demand_status接口获取数据，对应类型参数，参照附件1）  必填
        jsonObject.put("externalSourceId", "外部业务id");//外部业务id  必填
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总需求企业信息数据返回:{},时间:{}", res, new Date());
        return res;
    }

    //查询所有正常的审核通过的技术服务队发送    只发送一条
    public void rTsOne() throws Exception {
        List<TsTeam> list = tsTeamRepository.findNormalByLikeAreaWithOutIsShowFJSLimitOne(shtg);
        if (list != null && list.size() > 0) {
            for (TsTeam ts : list) {
                rTs(ts);
            }
        }
    }

    //查询所有正常的审核通过的企业需求中的企业信息发送   只发送一条
    public void rXqQyOne() throws Exception {
        List<SciTechnologyDemand> list = sciTechnologyDemandRepository.findNormalByLikeAreaWithOutIsShowFJSLimitOne(shtg);
        if (list != null && list.size() > 0) {
            for (SciTechnologyDemand sciTechnologyDemand : list) {
                rXqQy(sciTechnologyDemand);
            }
        }
    }

    //查询所有正常的审核通过的企业需求信息发送   需求中的企业发送后在发送   只发送一条
    public void rXqOne() throws Exception {
        List<SciTechnologyDemand> list = sciTechnologyDemandRepository.findNormalByLikeAreaWithOutIsShowFJSLimitOne(shtg);
        if (list != null && list.size() > 0) {
            for (SciTechnologyDemand sciTechnologyDemand : list) {
                rXq(sciTechnologyDemand);
            }
        }
    }

    //查询所有正常的审核通过的劳模信息发送   只发送一条
    public void rMOne() throws Exception {
        List<SciPersonnelInfo> list = sciPersonnelInfoRepository.findNormalByLikeAreaWithOutIsShowFJSLimitOne(shtg);
        if (list != null && list.size() > 0) {
            for (SciPersonnelInfo model : list) {
                rM(model);
            }
        }
    }

    //查询所有正常的审核通过的劳模中的企业信息发送   只发送一条
    public void rMQyOne() throws Exception {
        List<SciPersonnelInfo> list = sciPersonnelInfoRepository.findNormalByLikeAreaWithOutIsShowFJSLimitOne(shtg);
        if (list != null && list.size() > 0) {
            for (SciPersonnelInfo sciPersonnelInfo : list) {
                rMQy(sciPersonnelInfo);
            }
        }
    }

    //查询所有正常的审核通过的劳模中的企业信息发送   只发送一条   模拟
    public void rMQyOneMn() throws Exception {
        List<SciPersonnelInfo> list = sciPersonnelInfoRepository.findNormalByLikeAreaWithOutIsShowFJSLimitOne(shtg);
        if (list != null && list.size() > 0) {
            for (SciPersonnelInfo sciPersonnelInfo : list) {
                rMQyMn(sciPersonnelInfo, "91350100770663716E");
            }
        }
    }

    //TODO 发送劳模中的企业信息 real真实数据  模拟
    public String rMQyMn(SciPersonnelInfo model, String code) throws Exception {
        String businessLicense = code;
        String orgArea = model.getOrgArea();
        String[] split = orgArea.split(";");
        String gh_str = "";
        if (split.length == 1) {
            gh_str = split[0];
        }
        if (split.length == 2) {
            gh_str = split[1];
        }
        if (split.length == 3) {
            gh_str = split[2];
        }

        List<QzAreaManage> list = qzAreaManageRepository.findLikeNameOrUseName("%" + gh_str + "%", GHDQ);
        if (list == null) {
            log.info("劳模企业新增,未在全总对接数据表查询到此工会:{},时间:{}", gh_str, new Date());
            return "劳模企业新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() == 0) {
            log.info("劳模企业新增,未在全总对接数据表查询到此工会:{},时间:{}", gh_str, new Date());
            return "劳模企业新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() > 1) {
            log.info("劳模企业新增,在全总对接数据表查询到多个此工会:{},时间:{}", gh_str, new Date());
            return "劳模企业新增,在全总对接数据表查询到多个此工会" + gh_str;
        }
        //TODO 查询企业性质
        String qyXz = "";
        QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_QYXZ, "其他");
        qyXz = qzDictDetails.getDictValue();


        String cporgArea = model.getCompanyarea();
        String[] split2 = cporgArea.split(";");
        String dq_str = "";
        if (split2.length == 1) {
            dq_str = split2[0];
        }
        if (split2.length == 2) {
            dq_str = split2[1];
        }
        if (split2.length == 3) {
            dq_str = split2[2];
        }

        List<QzAreaManage> list2 = qzAreaManageRepository.findLikeNameOrUseName("%" + dq_str + "%", SZD);
        if (list2 == null) {
            log.info("劳模企业新增,未在全总对接数据表查询到此地区所在地:{},时间:{}", dq_str, new Date());
            return "劳模企业新增,未在全总对接数据表查询到此地区所在地" + dq_str;
        }
        if (list2.size() == 0) {
            log.info("劳模企业新增,未在全总对接数据表查询到此地区所在地:{},时间:{}", dq_str, new Date());
            return "劳模企业新增,未在全总对接数据表查询到此地区所在地" + dq_str;
        }
        if (list2.size() > 1) {
            log.info("劳模企业新增,在全总对接数据表查询到多个此地区所在地:{},时间:{}", dq_str, new Date());
            return "劳模企业新增,在全总对接数据表查询到多个此地区所在地" + dq_str;
        }


        String url = baseUrl + "/enterprise/addEnterprise";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", model.getEmployer());  //企业名称  必填
        jsonObject.put("code", businessLicense);//统一社会信用代码 必填  劳模表没有
        jsonObject.put("tradeUnionPathName", list.get(0).getPathName());  //所属工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("nature", qyXz);//企业性质 字典类型为craftsman_enterprise_property，调用字典查询接口获取数据 必填
        jsonObject.put("areaPathName", list2.get(0).getPathName());//所在地区全路径（参考所在地区查询接口） 必填
        //demand.getContacts() 联系人设为法定代表人
        jsonObject.put("legalRepresentative", null);  //法定代表人  非必填
        jsonObject.put("detailAddress", null);  //企业详细地址  非必填
        //jsonObject.put("establishedTime", demand.getRegistrationTime());  //企业成立时间（格式yyyy-MM-dd）  非必填
        //TODO 企业成立时间格式不统一暂时不传
        jsonObject.put("establishedTime", null);
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总劳模企业信息数据返回:{},发送的数据:{}", res, jsonObject.toJSONString());
        return res;
    }

    //查询所有正常的审核通过的劳模信息发送   只发送一条  模拟
    public void rMOneMn() throws Exception {
        List<SciPersonnelInfo> list = sciPersonnelInfoRepository.findNormalByLikeAreaWithOutIsShowFJSLimitOne(shtg);
        if (list != null && list.size() > 0) {
            for (SciPersonnelInfo model : list) {
                rMMn(model);
            }
        }
    }

    //TODO 发送企业劳模 real真实数据
    public String rMMn(SciPersonnelInfo model) throws Exception {
        Boolean picFlag = false;
        String picReturnId = "";
        String pic = model.getPic();
        if (pic != null && pic.contains("/")) {
            int lastSlashIndex = pic.lastIndexOf("/");
            String picName = pic.substring(lastSlashIndex + 1);
            picReturnId = doSendPicToQz(picName, pic);
            picFlag = true;
        }
        //TODO 查询劳模性别
        String sex = model.getSex();
        String sexStr = "";
        if (sex == null) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_SEX, "未知");
            sexStr = qzDictDetails.getDictValue();
        }
        if (sex.equals("男")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_SEX, "男");
            sexStr = qzDictDetails.getDictValue();
        } else if (sex.equals("女")) {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_SEX, "女");
            sexStr = qzDictDetails.getDictValue();
        } else {
            QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_SEX, "未知");
            sexStr = qzDictDetails.getDictValue();
        }
        //TODO 查询所在地区
        String cporgArea = model.getCompanyarea();
        String[] split2 = cporgArea.split(";");
        String dq_str = "";
        if (split2.length == 1) {
            dq_str = split2[0];
        }
        if (split2.length == 2) {
            dq_str = split2[1];
        }
        if (split2.length == 3) {
            dq_str = split2[2];
        }

        List<QzAreaManage> list2 = qzAreaManageRepository.findLikeNameOrUseName("%" + dq_str + "%", SZD);
        if (list2 == null) {
            log.info("劳模新增,未在全总对接数据表查询到此地区所在地:{},时间:{}", dq_str, new Date());
            return "劳模新增,未在全总对接数据表查询到此地区所在地" + dq_str;
        }
        if (list2.size() == 0) {
            log.info("劳模新增,未在全总对接数据表查询到此地区所在地:{},时间:{}", dq_str, new Date());
            return "劳模新增,未在全总对接数据表查询到此地区所在地" + dq_str;
        }
        if (list2.size() > 1) {
            log.info("劳模新增,在全总对接数据表查询到多个此地区所在地:{},时间:{}", dq_str, new Date());
            return "劳模新增,在全总对接数据表查询到多个此地区所在地" + dq_str;
        }
        //查询身份证号
        String idcard = model.getIdcard();
        String idCardStr = "";
        if (idcard != null) {
            idCardStr = model.getIdcard();
        }
        //查询国籍给默认
        String gj = "";
        QzDictDetails qzDictDetails = qzDictDetailsRepository.findTypeLabel(ZD_ZG, "中国");
        gj = qzDictDetails.getDictValue();

        //查询工作单位
        String unit = "";
        String employer = model.getEmployer();
        if (employer != null) {
            unit = model.getEmployer();
        }

        //查询所属工会
        String orgArea = model.getOrgArea();
        String[] split = orgArea.split(";");
        String gh_str = "";
        if (split.length == 1) {
            gh_str = split[0];
        }
        if (split.length == 2) {
            gh_str = split[1];
        }
        if (split.length == 3) {
            gh_str = split[2];
        }

        List<QzAreaManage> list = qzAreaManageRepository.findLikeNameOrUseName("%" + gh_str + "%", GHDQ);
        if (list == null) {
            log.info("劳模新增,未在全总对接数据表查询到此工会:{},时间:{}", gh_str, new Date());
            return "劳模新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() == 0) {
            log.info("劳模新增,未在全总对接数据表查询到此工会:{},时间:{}", gh_str, new Date());
            return "劳模新增,未在全总对接数据表查询到此工会" + gh_str;
        }
        if (list.size() > 1) {
            log.info("劳模新增,在全总对接数据表查询到多个此工会:{},时间:{}", gh_str, new Date());
            return "劳模新增,在全总对接数据表查询到多个此工会" + gh_str;
        }


        //TODO 查询所属行业类型
        String sshy = "";
        String industrySector = model.getTechnology();
        if (industrySector == null || industrySector.equals("")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_FWDHYLX, "其他");
            sshy = qzDictDetails3.getDictValue();
        }
        if (industrySector.contains("电子")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%信息%");
            sshy = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("建筑")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%建筑%");
            sshy = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("新材料")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%科学研究%");
            sshy = qzDictDetails3.getDictValue();
        } else if (industrySector.contains("环保")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_FWDHYLX, "%环境%");
            sshy = qzDictDetails3.getDictValue();
        } else {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_FWDHYLX, "其他");
            sshy = qzDictDetails3.getDictValue();
        }

        //TODO 查询劳模
        String mf = "";
        String matype = model.getMatype();
        if (matype == null) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_LDMF, "其他");
            mf = qzDictDetails3.getDictValue();
        }
        if (matype.contains("工匠")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_LDMF, "%工匠%");
            mf = qzDictDetails3.getDictValue();
        } else if (matype.contains("专家")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_LDMF, "%专家%");
            mf = qzDictDetails3.getDictValue();
        } else if (matype.contains("讲师")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_LDMF, "%讲师%");
            mf = qzDictDetails3.getDictValue();
        } else if (matype.contains("劳模") || matype.contains("劳动模范")) {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLikeLabel(ZD_LDMF, "%劳动模范%");
            mf = qzDictDetails3.getDictValue();
        } else {
            QzDictDetails qzDictDetails3 = qzDictDetailsRepository.findTypeLabel(ZD_LDMF, "其他");
            mf = qzDictDetails3.getDictValue();
        }

        String url = baseUrl + "/craftsman/addCraftsman";
        JSONObject jsonObject = new JSONObject();
        //傅祥文 模拟
        jsonObject.put("name", "傅祥文");  //劳模工匠姓名  必填
        //jsonObject.put("name", model.getZqxname());  //劳模工匠姓名  必填
        if (picFlag) {
            jsonObject.put("horizontalImg", picReturnId); //劳模工匠照片横图,传附件id（此处参照附附件上传接口返回的id，建议尺寸750*417）  不必填
            jsonObject.put("verticalImg", picReturnId);//劳模工匠照片横图,传附件id（此处参照附附件上传接口返回的id，建议尺寸750*417）     不必填
            jsonObject.put("squareImg", picReturnId);// 劳模工匠照片方图,传附件id（此处参照附附件上传接口返回的id，建议尺寸500*500）     不必填
        }
        jsonObject.put("introduce", model.getDetails());//简介  不必填
        jsonObject.put("masterMessage", null);//大师寄语  不必填
        jsonObject.put("deed", null);//工匠事迹  不必填
        jsonObject.put("sex", sexStr); //性别  字典类型sys_user_sex，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("nation", "汉族");//民族   必填
        jsonObject.put("enterType", mf);//入驻类型   字典类型craftsman_enter_type，调用字典查询接口获取数据，对应类型参数  必填
        jsonObject.put("enterTypeRemark", null);//入驻类型为其它的时候备注说明  非必填
        jsonObject.put("politicCountenance", null);//政治面貌   字典类型politic_countenance，调用字典查询接口获取数据，对应类型参数  非必填
        if (model.getPhone().equals("")) {
            jsonObject.put("phone", RSAUtils.encryptByPublicKey("", PUB_KEY));//通过全总平台提供公钥加密      联系电话 必填
        } else {
            jsonObject.put("phone", RSAUtils.encryptByPublicKey(model.getPhone(), PUB_KEY));//通过全总平台提供公钥加密      联系电话 必填
        }
        jsonObject.put("detailAddr", list2.get(0).getPathName()); //所在地区全路径（参考所在地区查询接口）  非必填
        jsonObject.put("address", model.getAddress());//详细地址  非必填
        jsonObject.put("nationality", gj);//国籍（字典类型sys_nationality，调用字典查询接口获取数据，对应类型参数  非必填
        if (idCardStr.equals("")) {
            //没有就默认传350100000000000000
            //模拟先填个真实 身份证号
            jsonObject.put("idNo", RSAUtils.encryptByPublicKey("350426197309164511", PUB_KEY));//通过全总平台提供公钥加密  身份证号 必填
            //jsonObject.put("idNo", RSAUtils.encryptByPublicKey("350100000000000000", PUB_KEY));//通过全总平台提供公钥加密  身份证号 必填
        } else {
            jsonObject.put("idNo", RSAUtils.encryptByPublicKey(idCardStr, PUB_KEY));//通过全总平台提供公钥加密  身份证号 必填
        }
        jsonObject.put("workUnit", unit);//工作单位(企业名称) 必填
        jsonObject.put("startWork", null);//参加工作时间（格式yyyy-MM-dd）  非必填
        jsonObject.put("laborUnionPath", list.get(0).getPathName());//所属工会全路径（参考所属工会查询接口）  必填
        jsonObject.put("post", model.getJobTitle());//职务  非必填
        jsonObject.put("postTitle", model.getPreviousYearSkill());//职称  非必填
        jsonObject.put("skillLevel", model.getPreviousYearAchievements());//技能等级  非必填
        jsonObject.put("fieldOfExpertise", model.getKeyword()); //擅长领域（字典类型field_of_expertise，调用字典查询接口获取数据，对应类型参数，参照附件1，多选用逗号拼接字典code） 非必填  改为不用字典
        jsonObject.put("remark", model.getMatype());//备注  非必填
        jsonObject.put("licenseType", "0");//证件类型(0身份证)  必填
        jsonObject.put("industry", sshy);//所属行业字典类型sys_industry，调用接口获取数据，对应类型参数 必填
        jsonObject.put("typeOfWork", "");//工种（字典类型industry_type_of_work，调用字典查询接口获取数据，对应类型参数  必填   改为不用字典
        jsonObject.put("status", "0");//状态（0：工匠信息已启用1：工匠信息已停用） 必填
        String res = print(url, jsonObject.toJSONString());
        log.info("发送全总劳模数据返回:{},发送的数据:{}", res, jsonObject.toJSONString());
        return res;
    }
}